import ITool from '../ITool';

/**
 * 鹰眼图工具箱
 * @implements {ITool}
 */
class OverviewTool extends ITool {
  constructor(_top, _impl) {
    super(_top, _impl);
    this.name = 'OverviewTool';
    this.desc = '鹰眼图工具箱';
    this._overviewmapdrag = this.overviewmapdrag.bind(this);
    this._overviewmapzoom = this.overviewmapzoom.bind(this);
    this._mapdrag = this.mapdrag.bind(this);
    this._mapzoom = this.mapzoom.bind(this);
  }

  onAdd() {
    super.onAdd();
  }

  onRemove() {
    super.onRemove();
  }

  /**
   * 初始化
   * @param {*} container 鹰眼图容器
   */
  init(container) {
    var optionBase = this.getImpl().options.base;
    this.overviewmap = new SGMap.Map({
      container: container,
      style: optionBase.style,
      zoom: optionBase.zoom,
      center: optionBase.center,
      localIdeographFontFamily: 'Microsoft YoHei',
      preserveDrawingBuffer: true
    });
    this.overviewmap.on('load', () => {
      this.log('overviewmap loaded');
      // 监听事件
      this.addEvents();
    });
  }

  /**
   * 移除鹰眼图
   */
  remove() {
    this.removeEvents();
    if(this.overviewmap) {
      this.overviewmap.remove();
    }
    this.overviewmap = null;
  }

  /**
   * 绑定鹰眼图事件
   */
  addEvents() {
    this.getMap().on('drag', this._mapdrag);
    this.getMap().on('move', this._mapdrag);
    this.getMap().on('zoom', this._mapzoom);
    // 鼠标移入鹰眼图，增加鹰眼图触发事件
    this.overviewmap.on('mouseover', () => {
      this.overviewmap.on('drag', this._overviewmapdrag);
      this.overviewmap.on('zoom', this._overviewmapzoom);
      this.getMap().off('drag', this._mapdrag);
      this.getMap().off('move', this._mapdrag);
      this.getMap().off('zoom', this._mapzoom);
    });
    // 鼠标移出鹰眼图，移除鹰眼图触发事件
    this.overviewmap.on('mouseout', () => {
      this.getMap().on('drag', this._mapdrag);
      this.getMap().on('move', this._mapdrag);
      this.getMap().on('zoom', this._mapzoom);
      this.overviewmap.off('drag', this._overviewmapdrag);
      this.overviewmap.off('zoom', this._overviewmapzoom);
    });
  }

  /**
   * 移除鹰眼图事件
   */
  removeEvents() {
    this.getMap().off('drag', this._mapdrag);
    this.getMap().off('move', this._mapdrag);
    this.getMap().off('zoom', this._mapzoom);
    this.overviewmap.off('drag', this._overviewmapdrag);
    this.overviewmap.off('zoom', this._overviewmapzoom);
  }

  /**
   * 鹰眼图拖拽事件
   * @ignore
   */
  overviewmapdrag() {
    this.getMap().setCenter(this.overviewmap.getCenter().toArray());
  }

  /**
   * 鹰眼图缩放事件
   * @ignore
   */
  overviewmapzoom() {
    this.getMap().setZoom(this.overviewmap.getZoom() + 4);
  }

  /**
   * 地图拖拽事件
   * @ignore
   */
  mapdrag() {
    this.overviewmap.setCenter(this.getMap().getCenter().toArray());
  }

  /**
   * 地图缩放事件
   * @ignore
   */
  mapzoom() {
    this.overviewmap.setZoom(this.getMap().getZoom() - 4);
  }
}

export default OverviewTool;
